Introdução ao [R] para linguistas

M. Godoy

27 de novembro de 2017

Visão Geral do R

Para que serve o R

  • Análise estatística

    sociolinguística e psicolinguística


  • Busca de dados em corpus

    sociolinguística (cf. material da Profa. Livia Oushiro/UNICAMP)


  • Visualização gráfica de dados

    sociolinguística e psicolinguística

Como baixar e usar o R

Como baixar o R

Como baixar o R

Como funciona o R

Como baixar o RStudio

Vamos dar uma olhada em como iniciar uma seção no RStudio

Abrindo o Rstudio

Criando uma nova sessão

Criando comentários

Salvando seu script

Salvando seu script em .R

Vamos abrir um script existente

Arquivo do workshop de hoje

Como o R funciona?

Como o R funciona?

Vejamos na prática

Linhas de comando

2+2
## [1] 4

Linhas de comando

3+4
## [1] 7

Linhas de comando

sqrt(4)
## [1] 2

Linhas de comando

sqrt(81)
## [1] 9

Linhas de comando

567+876
## [1] 1443
54*34
## [1] 1836
28-98
## [1] -70
sqrt(121)
## [1] 11

Importando e manipulando conjunto de dados

Importando conjunto de dados

Vamos carregar os pacotes que iremos usar nesse curso com a função library()

library(readxl)  #readxl permite ler tabelas em .txt e .xls
library(ggplot2) #permite gerar gráficos a partir de um conjunto de dados

Esses conjuntos já foram previamente instalados com a função install.packages()

Importando conjunto de dados

Definindo área de trabalho

session (ou seção) >> set working directory >> choose directory

Criando o conjunto de dados no seu script

Dizer ao R que conjunto daquela pasta ele deve ler e que nome ele receberá

nome do conjunto = read.table(“Nome do arquivo.txt”, header = TRUE)

data = read.table("DadosWorkshop.txt", header = TRUE)

Importando o conjunto de dados

Explorando o conjunto de dados

Clique no conjunto recém-criado na área ENVIRONMENT

Visualização gráfica de dados

Por que fazer gráficos?

Ajuda-nos a ver a relação entre uma variável RESPOSTA e uma variável PREDITORA

Por que fazer gráficos?

  • Qual a relação entre sexo e altura?
    • variável categórica e contínua


  • Qual a relação entre comprimento de cabelo e quantidade de shampoo necessária?
    • variáveis contínuas


  • Qual a relação entre formalidade e marcação de plural em português brasileiro?
    • variáveis categóricas

Como fazer gráficos no R?

  • ggplot2: pacote de visualização gráfica de dados


  • Baseado no livro Grammar of Graphics (Leland Wilkinson)


  • Um gráfico é como se fosse uma frase de uma língua, e cada elemento do gráfico é uma palavra

Como fazer gráficos no R?

  • Comando principal: ggplot()


  • Indicamos em ggplot() a nossa variável PREDITORA e nossa variável RESPOSTA


  • Todos os gráficos são gerados através do comando

    ggplot(dados, aes(x=PREDITORA, y=RESPOSTA))

Gráficos de dispersão

Será que a idade prevê o peso da pessoa?

ggplot(dados, aes(x=PREDITORA, y=RESPOSTA))

Será que a idade prevê o peso da pessoa?

ggplot(dados, aes(x=PREDITORA, y=RESPOSTA))

ggplot(data, aes(x=idade, y=peso))

OPS!!

ggplot(data, aes(x=idade, y=peso))

Precisamos informar que tipo de gráfico queremos

ggplot(data, aes(x=idade, y=peso))+
  geom_point()

Precisamos informar que tipo de gráfico queremos

ggplot(data, aes(x=idade, y=peso))+
  geom_point()

Vamos aumentar as bolinhas?

ggplot(data, aes(x=idade, y=peso))+
  geom_point()

Vamos aumentar as bolinhas?

ggplot(data, aes(x=idade, y=peso))+
  geom_point(size=4)

Vamos aumentar as bolinhas?

ggplot(data, aes(x=idade, y=peso))+
  geom_point(size=4)

Será que homens e mulheres tem pesos diferentes?

ggplot(data, aes(x=idade, y=peso))+
  geom_point(size=4)

Será que homens e mulheres tem pesos diferentes?

ggplot(data, aes(x=idade, y=peso))+
  geom_point(size=4)
ggplot(data, aes(x=idade, y=peso))+
  geom_point(size=4, aes(colour=sexo))

Será que homens e mulheres tem pesos diferentes?

ggplot(data, aes(x=idade, y=peso))+
  geom_point(size=4, aes(colour=sexo))

Vamos mudar as legendas do gráfico?

ggplot(data, aes(x=idade, y=peso))+
  geom_point(size=4, aes(colour=sexo))+
  labs(x="Idade (anos)", y="Peso (Kg)", colour="Gênero")

Vamos mudar as legendas do gráfico?

ggplot(data, aes(x=idade, y=peso))+
  geom_point(size=4, aes(colour=sexo))+
  labs(x="Idade (anos)", y="Peso (Kg)", colour="Gênero")

Será que as horas de atividade física indicam as horas de sono da pessoa?

  • ggplot(dados, aes(x=PREDITORA, y=RESPOSTA)) +
  • geom_point(size=4) +
  • labs(x=“Nome eixo x”, y = “Nome eixo y”)

Será que as horas de atividade física indicam as horas de sono da pessoa?

ggplot(data, aes(x=atividadehora, y=sono))+
      geom_point(size=4)+
      labs(x="Horas de atividade física por semana", y="Horas de sono por dia")

Será que as horas de atividade física indicam as horas de sono da pessoa?

ggplot(data, aes(x=atividadehora, y=sono))+
      geom_point(size=4)+
      labs(x="Horas de atividade física por semana", y="Horas de sono por dia")

Como podemos enxergar o que está sobreposto?

ggplot(data, aes(x=atividadehora, y=sono))+
      geom_point(size=4)+
      labs(x="Horas de atividade física por semana", y="Horas de sono por dia")

Como podemos enxergar o que está sobreposto?

ggplot(data, aes(x=atividadehora, y=sono))+
      geom_point(size=4, alpha=0.2)+
      labs(x="Horas de atividade física por semana", y="Horas de sono por dia")

Como podemos enxergar o que está sobreposto?

ggplot(data, aes(x=atividadehora, y=sono))+
      geom_point(size=4, alpha=0.2)+
      labs(x="Horas de atividade física por semana", y="Horas de sono por dia")

Vamos ver o primeiro gráfico que fizemos

Vamos ver o primeiro gráfico que fizemos?

ggplot(data, aes(x=idade, y=peso))+
  geom_point(size=4, alpha=0.3, aes(colour=sexo))+
  labs(x="Idade (anos)", y="Peso (Kg)", colour="Gênero")

Tente fazer sozinho 1

  • Será que a altura indica o tamanho do pé da pessoa? (dê o nome de “Altura (cm)” para o eixo x e “Tamanho do calçado” para o eixo y)
  • Será que o pessoal da Unicamp é mais alto ou mais baixo que da UFRN?

Tente fazer sozinho 1

Tente fazer sozinho 1

ggplot(data, aes(x=altura, y=pe))+
      geom_point(size=4, alpha=0.3, aes(colour=instituicao))+
      labs(x="Altura (cm)", y="Tamanho do calçado")

Tente fazer sozinho 2

  • Será que a altura de uma pessoa prevê o seu peso?
  • E a variável sexo influencia essa predição?
  • não se esqueça de nomear os eixos x e y

Tente fazer sozinho 2

Tente fazer sozinho 2

ggplot(data, aes(x=altura, y=peso))+
      geom_point(size=4, alpha=0.3, aes(colour=sexo))+
      labs(x="Altura (cm)", y="Peso (Kg)")

Nos estudos da linguagem, que tipo de questões envolvem duas variáveis contínuas?

  • Porcentagem de realização de variável x Idade


  • Memória de trabalho x Score em testes


  • Horas de estudo x Score em testes

Gráficos de barras

Quantas pessoas de cada instituição responderam ao nosso questionário?

ggplot(dados, aes(x=PREDITORA, y=RESPOSTA))

ggplot(data, aes(x=instituicao, y=?))

Quantas pessoas de cada instituição responderam ao nosso questionário?

ggplot(dados, aes(x=PREDITORA, y=?))

ggplot(data, aes(x=instituicao, y=..count..))

OPS!!

Quantas pessoas de cada instituição responderam ao nosso questionário?

Precisamos especificar que gráfico queremos

Quantas pessoas de cada instituição responderam ao nosso questionário?

Precisamos especificar que gráfico queremos

ggplot(data, aes(x=instituicao, y=..count..))+
  geom_bar()

Quantas pessoas de cada instituição responderam ao nosso questionário?

Precisamos especificar que gráfico queremos

ggplot(data, aes(x=instituicao, y=..count..))+
  geom_bar()

Vamos colocar legenda?

ggplot(data, aes(x=instituicao, y=..count..))+
  geom_bar()+

Vamos colocar legenda?

ggplot(data, aes(x=instituicao, y=..count..))+
  geom_bar()+
  labs(x="Instituição", y="Quantidade")

Vamos colocar legenda?

ggplot(data, aes(x=instituicao, y=..count..))+
  geom_bar()+
  labs(x="Instituição", y="Quantidade")

Quantas pessoas de cada sexo responderam ao nosso questionário?

ggplot(data, aes(x=instituicao, y=..count..))+
  geom_bar()+
  labs(x="Instituição", y="Quantidade")
ggplot(data, aes(x=sexo, y=..count..))+
  geom_bar()+
  labs(x="Sexo", y="Quantidade")

Quantas pessoas de cada sexo responderam ao nosso questionário?

ggplot(data, aes(x=sexo, y=..count..))+
  geom_bar()+
  labs(x="Sexo", y="Quantidade")

Tente fazer sozinho 3

  • Nossos entrevistados preferem filme ou série? (não se esqueça de legendar os eixos x e y)

Tente fazer sozinho 3

Tente fazer sozinho 3

Nossos entrevistados preferem filme ou série? (não se esqueça de legendar os eixos x e y)

ggplot(data, aes(x=assistir, y=..count..))+
  geom_bar()+
  labs(x="Preferência por Filme ou Série", y="Quantidade")

Tente fazer sozinho 4

Nossos entrevistados preferem gatos ou cachorros? (não se esqueça de legendar os eixos x e y)

Tente fazer sozinho 4

Nossos entrevistados preferem gatos ou cachorros? (não se esqueça de legendar os eixos x e y)

ggplot(data, aes(x=animal, y=..count..))+
  geom_bar()+
  labs(x="Preferência por Gato ou Cachorro", y="Quantidade")

Nos estudos da linguagem, que tipo de questões envolvem uma variável categórica?

  • Uso de duas (ou mais) variantes de uma variável linguística (e.g, nós x a gente)


  • Motivação da sala após sequência didática específica (também podemos medir continuamente)


  • Testes de compreensão (e.g., “vi a vizinha do minha irmã que ganhou na loteria” Quem ganhou na loteria?)

Nos estudos da linguagem, que tipo de questões envolvem uma variável categórica?

  • Uso de duas (ou mais) variantes de uma variável linguística (e.g, nós x a gente)


  • Você consegue pensar em situações que influenciem o uso de “nós” ou “a gente”

Gráfico de barras com 2 variáveis - comparando grupos

  • Será que a instituição onde a pessoa trabalha/estuda prevê se ela fala bolacha ou biscoito?


  • Primeiro precisamos saber quantas pessoas são da Unicamp ou UFRN

Gráfico de barras com 2 variáveis - comparando grupos

ggplot(data, aes(x=instituicao, y=..count..))+
          geom_bar()+
          labs(x="Instituição", y="Quantidade de pessoas")

Gráfico de barras com 2 variáveis - comparando grupos

Precisamos indicar, nas barras, a distribuição de quem fala bolacha ou biscoito por instituição

ggplot(data, aes(x=instituicao, y=..count..))+
          geom_bar()+
          labs(x="Instituição", y="Quantidade de pessoas")

Gráfico de barras com 2 variáveis - comparando grupos

Precisamos indicar, nas barras, a distribuição de quem fala bolacha ou biscoito por instituição

ggplot(data, aes(x=instituicao, y=..count..))+
          geom_bar(aes(fill=dialeto))+
          labs(x="Instituição", y="Quantidade de pessoas")

Gráfico de barras com 2 variáveis - comparando grupos

ggplot(data, aes(x=instituicao, y=..count..))+
          geom_bar(aes(fill=dialeto))+
          labs(x="Instituição", y="Quantidade de pessoas")

Gráfico de barras com 2 variáveis - comparando grupos

Será que sexo prevê se a pessoa prefere gato ou cachorro?

Gráfico de barras com 2 variáveis - comparando grupos

Primeiro precisamos saber quantas pessoas de cada sexo temos.

Gráfico de barras com 2 variáveis - comparando grupos

ggplot(data, aes(x=sexo, y=..count..))+
          geom_bar()+
          labs(x="Sexo", y="Quantidade de pessoas")

Gráfico de barras com 2 variáveis - comparando grupos

Precisamos indicar, nas barras, a distribuição de quem prefere cachorro ou gato

Gráfico de barras com 2 variáveis - comparando grupos

Precisamos indicar, nas barras, a distribuição de quem prefere cachorro ou gato

ggplot(data, aes(x=sexo, y=..count..))+
          geom_bar(aes(fill=animal))+
          labs(x="Sexo", y="Quantidade de pessoas")

Gráfico de barras com 2 variáveis - comparando grupos

ggplot(data, aes(x=sexo, y=..count..))+
          geom_bar(aes(fill=animal))+
          labs(x="Sexo", y="Quantidade de pessoas")

Tente fazer sozinho 5

Será que sexo prevê se a pessoa prefere filme ou série?

Tente fazer sozinho 5

Tente fazer sozinho 5

Será que sexo prevê se a pessoa prefere filme ou série?

ggplot(data, aes(x=sexo, y=..count..))+
          geom_bar(aes(fill=assistir))+
          labs(x="Sexo", y="Quantidade de pessoas")

Tente fazer sozinho 6

Será que o local onde a pessoa mora prevê se ela faz exercício físico?

Tente fazer sozinho 6

Tente fazer sozinho 6

Será que o local onde a pessoa mora prevê se ela faz exercício físico?

ggplot(data, aes(x=instituicao, y=..count..))+
          geom_bar(aes(fill=atividade))+
          labs(x="Instituição", y="Quantidade de pessoas")

Funções adicionais

E podemos editar mais o gráfico?

  • A sintaxe da função é como a sintaxe de uma língua


  • Cada elemento que inserimos é como uma palavra


  • Podemos inserir novas palavras indefinidamente

O que mais podemos fazer?

Exemplo

Quero mudar as cores do gráfico e o título da legenda

ggplot(data, aes(x=instituicao, y=..count..))+
          geom_bar(aes(fill=atividade))+
          scale_fill_manual("Faz atividade física?", values = c("nao" = "light blue", "sim" = "#2b8cbe"), labels=c("Não", "Sim"))+
  scale_x_discrete(labels=c("UFRN" = "Natal", "Unicamp" = "Campinas"))+
          labs(x="Cidade", y="Quantidade de pessoas")

Exemplo

Quero mudar a cor do fundo

ggplot(data, aes(x=instituicao, y=..count..))+
          geom_bar(aes(fill=atividade))+
          scale_fill_manual("Faz atividade física?", values = c("nao" = "light blue", "sim" = "#2b8cbe"), labels=c("Não", "Sim"))+
  scale_x_discrete(labels=c("UFRN" = "UFRN", "Unicamp" = "Unicamp"))+
          labs(x="Cidade", y="Quantidade de pessoas")+
          theme_bw()

Exemplo

Quero colocar um contorno preto nas barras

ggplot(data, aes(x=instituicao, y=..count..))+
          geom_bar(color="black", aes(fill=atividade))+
          scale_fill_manual("Faz atividade física?", values = c("nao" = "light blue", "sim" = "#2b8cbe"), labels=c("Não", "Sim"))+
  scale_x_discrete(labels=c("UFRN" = "UFRN", "Unicamp" = "Unicamp"))+
          labs(x="Cidade", y="Quantidade de pessoas")+
          theme_bw()

Fazendo um gráfico do zero

Entendendo o conjunto de dados

  • O arquivo concordancia.txt tem um pequeno conjunto de dados inventados cuja criação foi baseada nas hipóteses que assumimos sobre a relação entre produção de concordância de número no sintagma nominal e grau de formalidade do discurso


  • A hipótese geralmente assumida é a de que o contexto formal aumenta a taxa de concordância no sintagma nominal

Para fazer o gráfico

  • Importe o arquivo
    • nome = read.table("nome_do_arquivo.txt", header = TRUE)


  • Explore as colunas
    • qual a coluna da variável preditora?
    • qual a coluna da variável resposta?


  • Faça um gráfico considerando
    • o que colocar nos eixos x e y
    • que tipo de gráfico você terá (dispersão ou barras?)
    • que tipo de informação você quer mostrar
    • Legendas apropriadas para eixos x e y

Resposta Projeto 1

Resposta Projeto 1

dados.projeto1 = read.table("concordancia.txt", header = TRUE)

Resposta Projeto 1

ggplot(dados.projeto1, aes(x=contexto, y=..count..))+
          geom_bar(aes(fill=concordancia))+
          labs(x="Contexto de enunciação", y="Ocorrência de concordância no SN")+
          theme_bw()

Entendendo o conjunto de dados

  • O arquivo iwish.txt tem um pequeno conjunto de dados inventados cuja criação foi baseada nas hipóteses que assumimos sobre a relação entre memória de trabalho e proficiência de leitura


  • A hipótese é de que memória de trabalho prevê proficiência de leitura, e questiona-se se o modo de apresentação teria algum efeito nessa suposta previsão

Para fazer o gráfico

  • Importe o arquivo
    • nome = read.table("nome_do_arquivo.txt", header = TRUE)


  • Explore as colunas
    • qual a coluna da variável preditora?
    • qual a coluna da variável resposta?


  • Faça um gráfico considerando
    • o que colocar nos eixos x e y
    • que tipo de gráfico você terá (dispersão ou barras?)
    • que tipo de informação você quer mostrar
    • Legendas apropriadas para eixos x e y

Resposta Projeto 2

Resposta Projeto 2

dados.projeto2 = read.table("iwish.txt", header = TRUE)

Resposta Projeto 2

ggplot(dados.projeto2, aes(x=pontuacao.memoria, y=pontuacao.leitura))+
          geom_point(size = 4, alpha = 0.3, aes(colour=modo.apresentacao))+
          labs(x="Pontuação em teste de memória de trabalho", y="Pontuação em teste de leitura")+
          theme_bw()